﻿#region << 文件说明 >>
/*----------------------------------------------------------------
 * 命名空间：Vampirewal.Core.Attributes
 * 唯一标识：4afcd0a8-b3ab-49d9-a7a4-f3bd63d8b688
 * 文件名：MessengerAopAttribute
 * 
 * 创建者：杨程
 * 电子邮箱：235160615@qq.com
 * 创建时间：2023/9/27 10:29:23
 * 版本：V1.0.0
 * 描述：
 *
 * ----------------------------------------------------------------
 * 修改人：
 * 时间：
 * 修改说明：
 *
 * 版本：V1.0.1
 *----------------------------------------------------------------*/
#endregion << 文件说明 >>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace Vampirewal.Core.Attributes;

/*
 * 针对Messenger的Method的Aop方法
 */


/// <summary>
/// 消息方法AOP特性基类
/// </summary>
[AttributeUsage(AttributeTargets.Method)]
public abstract class MessengerAopBaseAttribute : Attribute
{
    /// <summary>
    /// 方法执行前
    /// </summary>
    /// <param name="context">上下文</param>
    public abstract void ExcuteBefore(MessengerAopContext context);
    /// <summary>
    /// 方法执行后
    /// </summary>
    /// <param name="context">上下文</param>
    public abstract void ExcuteAfter(MessengerAopContext context);
}

/// <summary>
/// 事件上下文
/// </summary>
public sealed class MessengerAopContext
{
    /// <summary>
    /// 传递过来的参数
    /// </summary>
    public object[] PassData { get; set; }

    /// <summary>
    /// 消息Token
    /// </summary>
    public string MessengerToken { get; set; }

    /// <summary>
    /// 执行的方法名
    /// </summary>
    public string MethodName { get; internal set; } = "";

    /// <summary>
    /// 开始执行时间
    /// </summary>
    public DateTime? ExcutingTime { get; internal set; }

    /// <summary>
    /// 执行结束时间
    /// </summary>
    public DateTime? ExcutedTime { get; internal set; }

    /// <summary>
    /// 异常信息
    /// </summary>
    public Exception? ExceptionInfo { get; internal set; }

    /// <summary>
    /// 方法返回值
    /// </summary>
    public object MethodResult { get; internal set; }
}
